// 描述

// 假设表达式中只允许包含一种括号：圆括号，需要成对出现。即(( ))或(( )( ))等为正确的格式，(( )或 ( ))或(((均为不正确的格式。
// 给定一串括号输入（换行作为结束符），检测格式是否正确，若正确输出YES；错误输出NO。
// （括号数量≤100）

// 输入描述

// 无

// 输出描述

// 无

// 样例输入 1 

// (())
// 样例输出 1 

// YES

// 解题思路
// 本题要求检测只包含圆括号的表达式格式是否正确，圆括号需要成对出现。我们可以使用栈（Stack）这种数据结构来解决这个问题，具体步骤如下：

// 读取输入：读取包含圆括号的字符串。
// 遍历字符串：对字符串中的每个字符进行遍历。
// 若遇到左括号 (，将其压入栈中。
// 若遇到右括号 )，检查栈是否为空：
// 若栈不为空且栈顶元素为左括号 (，则将栈顶元素弹出。
// 若栈为空或栈顶元素不是左括号 (，则说明括号格式不正确，输出 NO 并结束程序。
// 检查栈的状态：遍历结束后，检查栈是否为空。
// 若栈为空，说明所有括号都正确匹配，输出 YES。
// 若栈不为空，说明有左括号没有匹配的右括号，输出 NO。

#include <bits/stdc++.h>
using namespace std;

// 定义一个字符栈，用于存储左括号
stack<char> s;
// 定义字符数组，用于存储输入的括号字符串
char a[201];

int main() {
    // 读取输入的括号字符串
    cin >> a;
    // 计算输入字符串的长度
    int len = strlen(a);

    // 遍历输入的字符串
    for (int i = 0; i < len; i++) {
        // 若当前字符为左括号，将其压入栈中
        if (a[i] == '(') {
            s.push(a[i]);
        } 
        // 若当前字符为右括号，检查栈是否为空且栈顶是否为左括号
        else if (a[i] == ')' &&!s.empty() && s.top() == '(') {
            // 若满足条件，弹出栈顶元素
            s.pop();
        } 
        // 若不满足匹配条件，说明括号格式错误
        else {
            cout << "NO";
            return 0;
        }
    }

    // 遍历结束后，检查栈是否为空
    if (s.empty()) {
        // 若栈为空，说明所有括号都正确匹配
        cout << "YES";
    } else {
        // 若栈不为空，说明有左括号没有匹配的右括号
        cout << "NO";
    }

    return 0;
}









